package com.frame.jfinal.interceptor;

import java.util.HashSet;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
import com.jfinal.core.Controller;
import com.jfinal.render.Render;

/**
 * @author LRC
 * @createDate 2015年5月19日
 * @description 登录验证拦截器
 */
public class SystemLoginInterceptor implements Interceptor{
	
	//不做请求资源校验的资源路径
	public static Set<String> noValidateURI = new HashSet<String>();
	public static String ctx = null;

	public static void initNoValidateURI(){
		//注册不需要登录验证的操作
		noValidateURI.add(ctx+"/");
		noValidateURI.add(ctx+"/getValidateCode");
		noValidateURI.add(ctx+"/validateCode");
		noValidateURI.add(ctx+"/login");
		noValidateURI.add(ctx+"/register");
		noValidateURI.add(ctx+"/validUserCode");
		
		//网欣业务登录
		noValidateURI.add(ctx+"/wxwyapp/user/toBindWeiXin");
		noValidateURI.add(ctx+"/wxwyapp/user/toLogin");
		noValidateURI.add(ctx+"/wxwyapp/user/login");
		
		//微信请求不需要验证
		noValidateURI.add(ctx+"/weixin/wxwypub");
		noValidateURI.add(ctx+"/weixin/wxwypub/urlRedirect_dims");
	}
	
	public void intercept(ActionInvocation ai) {
		
		Controller c = ai.getController();
		//初始化上下文变量
		if(ctx==null){
			ctx = c.getRequest().getContextPath();
			//注册noValidateURI
			initNoValidateURI();
		}
		//获取请求资源路径
		HttpServletRequest request = c.getRequest();
		String uri = request.getRequestURI();
		//请求地址
		c.setSessionAttr("requestURI", uri);
		System.out.println("requestURI = " + uri);
		String rURL = uri.substring(0,uri.lastIndexOf("?")==-1 ? uri.length() : uri.lastIndexOf("?"));
		boolean go = noValidateURI.contains(rURL);
		if(go){
			//继续执行请求
			ai.invoke();
		}else{
			//A 判断是否为webApp网欣业务请求
			if(rURL.startsWith(ctx+"/wxwyapp/")){
				//验证appUser是否为空
				Object appUser = c.getSession().getAttribute("appUser");
				if(appUser==null){
					//跳转到登录界面 暂无，不用登录
					//c.redirect("/wxwyapp/user/toLogin");
					
					//继续执行请求
					ai.invoke();
					
				}else{
					//继续执行请求
					ai.invoke();
				}
			}else{
				//B 进行管理后台登录验证
				//验证是否已经登录
				Object user = c.getSession().getAttribute("user");
				if(user==null){
					//重定向到登录界面
					//sesson保存当前请求的操作
					c.getSession().setAttribute("lastURI", uri);
					//重定向到登录界面
					c.redirect("/");
					//返回未登录标识
					//c.renderJson("no login");
					//返回登录对话框内容
					//c.render("/WEB-INF/html/loginDialog.html");
				}else{
					//继续执行请求
					ai.invoke();
				}
			}
			
			
			
			
		}
	}

}
